package com.dmz.workflow.vo;


import com.alibaba.fastjson.annotation.JSONField;
import com.echronos.commons.utils.FilePathDeSerializer;
import com.echronos.commons.utils.FilePathSerializer;
import com.echronos.commons.utils.TimeSerializerUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 流程信息
 */
@Data
@ApiModel(value = "FormInfo对象", description = "FormInfo")
public class FormInfoVo implements Serializable {

    private static final long serialVersionUID = 997279032236242516L;
    /**
     * 主键
     */
    @ApiModelProperty(value = "主键")
    private Integer id;
    /**
     * 语言 cn中文 en英文
     */
    @ApiModelProperty(value = "语言 cn中文 en英文")
    private String lang;
    /**
     * 租户ID
     */
    @ApiModelProperty(value = "租户ID")
    private String tenantId;
    /**
     * 应用ID
     */
    @ApiModelProperty(value = "应用ID")
    private Integer appId;
    /**
     * 版本号
     */
    @ApiModelProperty(value = "版本号")
    private Integer version;
    /**
     * 工作流名
     */
    @ApiModelProperty(value = "工作流名")
    private String name;
    /**
     * 分组ID
     */
    @ApiModelProperty(value = "分组ID")
    private Integer groupId;
    /**
     * 关联流程权限记录表
     */
    @ApiModelProperty(value = "关联流程权限记录表")
    private Integer permiId;
    /**
     * 模版图标
     */
    @ApiModelProperty(value = "模版图标")
    @JSONField(deserializeUsing = FilePathDeSerializer.class, serializeUsing = FilePathSerializer.class)
    private String icon;
    /**
     * 审批说明
     */
    @ApiModelProperty(value = "审批说明")
    private String approvalInstructions;
    /**
     * 审批人签名 0 非必签；1 必签
     */
    @ApiModelProperty(value = "审批人签名 0 非必签；1 必签")
    private Integer signature;
    /**
     * 审批意见填写提示
     */
    @ApiModelProperty(value = "审批意见填写提示")
    private String approvalAdvice;
    /**
     * 审批意见 1 对发起人可见 0 对发起人不可见
     */
    @ApiModelProperty(value = "审批意见 1 对发起人可见 0 对发起人不可见")
    private Integer approvalAdviceType;
    /**
     * 审批人去重 0 不去重；1 连续去重；2 非连续去重
     */
    @ApiModelProperty(value = "审批人去重 0 不去重；1 连续去重；2 非连续去重")
    private Integer approvalRemoveRepetition;
    /**
     * 发起人审批自动通过, 1 为自动通过,；0为不自动通过
     */
    @ApiModelProperty(value = "发起人审批自动通过, 1 为自动通过,；0为不自动通过")
    private Integer autoApproval;
    /**
     * 通知抄送人 0 仅发起时通知；1 仅全部同意后通知；2 发起和全部同意后均通知
     */
    @ApiModelProperty(value = "通知抄送人 0 仅发起时通知；1 仅全部同意后通知；2 发起和全部同意后均通知")
    private Integer noticeCcPerson;
    /**
     * 是否公有 1 私有；0 公有
     */
    @ApiModelProperty(value = "是否公有 1 私有；0 公有")
    private Integer isPublic;
    /**
     * 状态；0 正常
     */
    @ApiModelProperty(value = "状态；0 正常")
    private Integer status;
    /**
     * 是否已删除；0未删除 1已删除
     */
    @ApiModelProperty(value = "是否已删除；0未删除 1已删除")
    private Integer isDeleted;
    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间")
    @JSONField(serializeUsing = TimeSerializerUtils.class)
    private LocalDateTime createTime;
    /**
     * 修改人
     */
    @ApiModelProperty(value = "修改人")
    private Integer updateUser;
    /**
     * 修改时间
     */
    @ApiModelProperty(value = "修改时间")
    @JSONField(serializeUsing = TimeSerializerUtils.class)
    private LocalDateTime updateTime;
    /**
     * 创建人
     */
    @ApiModelProperty(value = "创建人")
    private Integer createUser;
    /**
     * 表单的FormKey的json
     */
    @ApiModelProperty(value = "表单json")
    private String formJson;

    /**
     * 工作流程定义ID
     */
    @ApiModelProperty(value = "工作流ID")
    private String processDefinitionId;

    /**
     * 是否为套件；0:否 1:是
     */
    @ApiModelProperty(value = "是否为套件；0:否 1:是")
    private Integer isSuit;

    /**
     * 表单的FormKey用于关联流程任务的字段
     */
    @ApiModelProperty(value = "表单的FormKey用于关联流程任务的字段")
    private String formKey;

    /**
     * 公司id
     */
    @ApiModelProperty(value = "公司id")
    private Integer companyId;
    /**
     * 排序 序号
     */
    @ApiModelProperty(value = "序号")
    private Integer sort;

    /**
     * 发起审批人
     */
    @ApiModelProperty(value = "发起审批人")
    private List<FormPermiVo> visible;

    /**
     * 管理审批模版人员
     */
    @ApiModelProperty(value = "管理审批模版人员")
    private List<TemplateManagerVo> managers;

    /**
     * 流程设计model 的JSON
     */
    @ApiModelProperty(value = "流程设计Json")
    private String workSetModelVo;

    /**
     * 流程设计JsonTree
     */
    @ApiModelProperty(value = "流程设计JsonTree")
    private String processJsonTree;

    /**
     * 流程定义的权限
     */
    @ApiModelProperty(value = "流程定义的权限")
    private String permiName;

}